﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace WEBRM.Utilis
{
    public class ConnectionString
    {
        /*Traduzir o nome dos nomes dos parametros da string de conexão de ingles
        para portugues.
         * Servidor = Server
         * Usuario = User
         * Senha = Password
         * BancoDeDados = Database
         * 
         * MySql - Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
         * SqlServer 2008/2005/2000/7 - Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;
         * Oracle - Data Source=TORCL;User Id=myUsername;Password=myPassword;
         * Firebird - User=SYSDBA;Password=masterkey;Database=SampleDatabase.fdb;DataSource=localhost; Port=3050;Dialect=3; Charset=NONE;Role=;Connection lifetime=15;Pooling=true; MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;
         * PostgreeSQL (HOST) - Server=127.0.0.1;Port=5432;Database=myDataBase;User Id=myUsername;Password=myPassword; 
        */

        private string _conn;
        private Hashtable _dados;

        public Hashtable Propriedades
        {
            get { return _dados; }
        }

        public ConnectionString(string conn)
        {
            _conn = conn;
            _dados = new Hashtable();

            MontarString();
        }

        

        public ConnectionString(string conn, string type)
        {
            _conn = conn;
            _conn = TraduzirParametros(type);
            _dados = new Hashtable();

            MontarString();
        }


        string TraduzirParametros(string type)
        {
            string novaconn = "";

            switch (type)
            {
                case "NHibernate.Dialect.MySQLDialect":
                    novaconn = _conn.Replace("Server", "Servidor")
                                .Replace("Uid", "Usuario")
                                .Replace("Pwd", "Senha")
                                .Replace("Database", "BaseDados");
                    break;
                case "NHibernate.Dialect.MsSql2000Dialect":
                case "NHibernate.Dialect.MsSql2005Dialect":
                case "NHibernate.Dialect.MsSql7Dialect":
                    novaconn = _conn.Replace("Data Source", "Servidor")
                               .Replace("User Id", "Usuario")
                               .Replace("Password", "Senha")
                               .Replace("Initial Catalog", "BaseDados");
                    break;
                case "NHibernate.Dialect.Oracle9Dialect":
                case "NHibernate.Dialect.OracleDialect":
                    throw new NotImplementedException("Tradução não implementada");
                case "NHibernate.Dialect.FirebirdDialect":
                    throw new NotImplementedException("Tradução não implementada");
                case "NHibernate.Dialect.PostgreSQL82Dialect":
                    throw new NotImplementedException("Tradução não implementada");
            }

            return novaconn;
        }

        void MontarString()
        {
            string[] splitConn = _conn.Split(';');

            if (splitConn.Length > 0)
            {
                foreach (var item in splitConn)
                {
                    if (!string.IsNullOrEmpty(item))
                    {
                        string[] keypair = item.Split('=');
                        if (keypair.Length > 1)
                            _dados[keypair[0]] = keypair[1];
                        else
                            _dados[keypair[0]] = "";
                    }

                }
            }
        }

    }
}
